package com.zhuiyun.project.api.system.role.service;


import com.zhuiyun.project.api.system.role.entity.SysRole;
import com.zhuiyun.project.api.system.user.entity.SysUser;
import com.zhuiyun.project.api.system.user.entity.SysUserRole;
import com.zhuiyun.project.common.response.CommonResult;
import com.zhuiyun.project.utils.pageUtil.PageRequest;
import com.zhuiyun.project.utils.pageUtil.PageResult;
import io.swagger.models.auth.In;

import java.util.Collection;
import java.util.List;
import java.util.Set;

/**
* @Author Acer
    角色  业务层
*/
public interface SysRoleService {
    /**
     * @Author hyp
     * @Description 角色详情分页查询
     * @Date 2023/10/26 14:38
     * @Return com.zhuiyun.project.common.response.CommonResult
     * @param pageRequest
     * @param sysRole
     */
    PageResult listRoles(PageRequest pageRequest, SysRole sysRole);

    /**
    * @Author Acer
    * @Description 批量删除角色信息
    * @Date 2023/10/25 15:32
    * @Return com.zhuiyun.project.common.response.CommonResult
    * @param roleIds
    */
    CommonResult removeRoleByIds(Long[] roleIds);

    /**
     * @Author hyp
     * @Description 新增角色信息
     * @Date 2023/10/26 14:36
     * @Return com.zhuiyun.project.common.response.CommonResult
     * @param role
     */
    int addRole(SysRole role);

    /**
     * @Author hbx
     * @Description 校验角色是否有数据权限
     * @Date 2023/6/22 10:00
     * @param roleId
     */
    void checkRoleDateScope(Long roleId);

    /**
     * @Author hyp
     * @Description 根据角色编号查询角色信息
     * @Date 2023/10/26 14:35
     * @Return com.zhuiyun.project.common.response.CommonResult
     * @param roleId
     */
    SysRole getInfoRoleById(Long roleId);

    /**
     * @Author hbx
     * @Description 校验角色是否允许操作
     * @Date 2023/6/22 9:59
     * @param role
     */
    void checkRoleAllowed(SysRole role);

    /**
     * @Author hyp
     * @Description 修改角色信息
     * @Date 2023/10/26 14:34
     * @Return com.zhuiyun.project.common.response.CommonResult
     * @param role
     */
    int editRole(SysRole role);

    /**
     * @Author hyp
     * @Description 角色状态修改
     * @Date 2023/10/26 14:34
     * @Return com.zhuiyun.project.common.response.CommonResult
     * @param role
     */
    int changeStatusRole(SysRole role);

    /**
     * @Author hyp
     * @Description 批量选择用户授权
     * @Date 2023/10/26 14:32
     * @Return com.zhuiyun.project.common.response.CommonResult
     * @param roleId
     * @param userIds
     */
    int selectAuthUserAll(Long roleId, Long[] userIds);

    /**
     * @Author hyp
     * @Description 取消授权用户
     * @Date 2023/10/26 14:31
     * @Return com.zhuiyun.project.common.response.CommonResult
     * @param userRole
     */
    int cancelAuthUser(SysUserRole userRole);

    /**
     * @Author hyp
     * @Description 批量取消授权用户
     * @Date 2023/10/26 14:31
     * @Return com.zhuiyun.project.common.response.CommonResult
     * @param roleId
     * @param userIds
     */
    int cancelAuthUserAll(Long roleId, Long[] userIds);

    /**
      * @Author hyp
      * @Description 校验唯一角色名称
      * @Date 2023/10/26 15:31
      * @Return boolean
      * @param role
    */
    boolean checkRoleNameUnique(SysRole role);
    /**
     * @Author hyp
     * @Description 校验唯一角色权限
     * @Date 2023/10/26 15:31
     * @Return boolean
     * @param role
     */
    boolean checkRoleKeyUnique(SysRole role);

    /**
      * @Author hyp
      * @Description 查询所有角色信息
      * @Date 2023/10/30 18:56
      * @Return java.util.List<com.zhuiyun.project.api.system.role.entity.SysRole>

    */
    List<SysRole> selectRoleAll();

    Set<String> selectRolePermissionByUserId(Long valueOf);


    /**
     * @Author hyp
     * @Description 查询未分配用户的角色
     * @Date 2023/11/2 9:48
     * @Return com.zhuiyun.project.common.response.CommonResult
     * @param userId
     */
    List<SysRole> selectRolesByUserId(Integer userId);
}
